ed(editor)是用於Unix和類Unix作業系統的行編輯器。它是Unix作業系統在1969年8月開發出來的最初部分[1]。它仍舊是POSIX和Open Group的基於Unix的作業系統標準的一部分[2],與更加完備的全螢幕幕編輯器vi並列。
歷史和影響
ed文字編輯器是Unix作業系統最初的三個要件之一:組譯器、編輯器和shell,它們是肯·湯普遜在1969年8月於AT&T貝爾實驗室在PDP-7上開發的[3]。ed的很多特徵來自qed文字編輯器,它是湯普遜的母校加州大學伯克利分校開發的[4] 。湯普遜非常熟悉qed,曾經在CTSS和Multics系統上重新實現過它。湯普遜版本的qed曾因首先實現了正則表達式而著名。正則表達式也實現於ed中,儘管相比qed中的這裏實現的要相當不具一般性。
丹尼斯·里奇生產了後來道格拉斯·麥克羅伊所描述的「終極」ed[5],ed的各方面轉而影響了ex,它依次又產生了vi。非互動式Unix命令grep受到qed和後來的ed常見特定用法的啟發,它們的命令g/re/p含義是全域尋找正則表達式re並列印包含它的行。Unix串流編輯器sed實現了未被Unix上的ed所支援的qed的很多指令碼特徵。
特徵
ed的特徵包括:
著稱於它的簡潔性,ed幾乎不給予視覺反饋[6],故而曾被Peter H. Salus稱為「曾有過的最仇視用戶的編輯器」,即使是比較於同時代的(因複雜而聲名狼藉的)TECO。例如,在有錯誤的情況,或它想要確認用戶希望不儲存退出的時候,ed產生的訊息就是「?」。它不報告當前檔名或行號,甚至不顯示變更文字的結果,除非發出要求。更老版本(大約1981年)在發起退出命令而用戶沒有儲存變更的時候甚至不提示確認[6]。這種簡潔性對Unix的早期版本是適當的,那時控制台是電傳打字機,數據機很慢,而主記憶體是珍貴的。電腦技術進步使得這些限制解除了,有更多視覺反饋的編輯器成為常規。
在當前實踐中,ed極少互動式使用,但卻在一些shell指令碼中有所使用。對於互動式使用,ed於1980年代被sam、vi和Emacs編輯器取代。ed事實上可以在所有可獲得的Unix和Linux版本上找到,因此對必須在多個版本Unix上工作的人有用。在基於Unix的作業系統上,一些實用工具如SQL Plus執行ed作為編輯器,如果EDITOR和VISUAL環境變數沒有定義的話[7]。如果在故障的情況下,ed有時是唯一可獲得的編輯器。這幾乎是它互動式使用的唯一時刻。
ed命令在其他基於行的編輯器中經常被模仿。例如,在早期版本的MS-DOS和32-bit版本的Windows NT中,EDLIN有某種程度上類似的語法,在很多MUD(LPMud和後代)中的文字編輯器使用類似ed的語法。但是這些編輯器典型的在功能上更加有限。
例子
下面是一個ed對談的例子抄錄。為了清晰,命令和用戶鍵入的文字使用正常字型,而來自ed的輸出被加粗。
a ed is the standard Unix text editor. This is line number two. . 2i . ,l ed is the standard Unix text editor.$ $ This is line number two.$ 3s/two/three/ ,l ed is the standard Unix text editor.$ $ This is line number three.$ w text 65 q
最後結果是包含下列文字的一個簡單文字檔案:
ed is the standard Unix text editor. This is line number three.
開始於一個空檔案,a
命令附加文字,所有ed命令都是單一字母。這個命令安置ed進入「插入模式」,插入隨後的字元,並由只有一個單一的點的行終止。在此點終止前鍵入的兩行進入檔案緩衝區。2i
命令也進入插入模式,並在第2行之前插入鍵入的文字,這裏是空行。所有命令都可以字首一個行號來在此行上進行操作。
在行,l
中,l表示列表命令。這個命令字首着一個範圍,這裏是,
,它是1,$
的簡寫。範圍是由逗號分隔的兩個行號,$
意味着最後一行。作為回應,ed列出所有行,從最先至最後。這些行用美元號終結,所以在行尾的空白明顯可見。
一旦空行被插入到第2行前,讀作「This is line number two」的行,現在實際上是第3行。這個錯誤使用3s/two/three/
命令來更正,這是替換命令。3
指定應用這個命令的那個行;隨後是要被替換的文字,接着是要替代成的文字。現在用,l
命令列出的行是正確的了。
w text
命令寫緩衝區到檔案「text」,使得ed用「65」來響應,這是寫到檔案中的字元數目。q
命令結束ed對談。
參見
- ex (文字編輯器),最初是擴充版本的ed。
- vi,基於ex的可視全螢幕幕編輯器.
- sed,基於ed內指令碼特徵的標準UNIX串流編輯器。
- Edlin,受ed影響的標準MS-DOS行編輯器。
- Sam (文字編輯器)
- 編輯器之戰
- Unix實用程式列表
參照
外部連結
Wikiwand in your browser!
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.